-- =====================================================================================
-- 协同线程

-- -- 创建一个协同线程实例
-- crt = coroutine.create(function (a, b)
--     print(a, b, a+b)
--     -- 获取正在运行的协同线程实例，thread类型
--     tr = coroutine.running()
--     print(tr)
--     -- 查看协同线程实例的类型
--     print(type(tr))
--     -- 查看协同线程实例的状态
--     print(coroutine.status(tr))
--     -- 将当前协同线程实例挂起
--     coroutine.yield()

--     print("又重新返回到了协同线程")
-- end)

-- -- 启动协同线程实例
-- coroutine.resume(crt,3,5)

-- -- 查看协程状态
-- print("main-thread",coroutine.status(crt))

-- coroutine.resume(crt) -- 挂起再恢复，不用再加参数

-- -- 3	5	8
-- -- thread: 00C7DFE0
-- -- thread
-- -- running
-- -- main-thread	suspended
-- -- 又重新返回到了协同线程


-- ============================================================

-- -- 创建一个协同线程实例
-- crt = coroutine.create(function (a, b)
--     print(a, b)
--     -- 将当前协同线程实例挂起
--     coroutine.yield(a*b, a/b) -- 挂起的时候，携带返回值
--     print("又重新返回到了协同线程")

--     -- 执行完毕协程，返回两个参数
--     return a+b, a-b
-- end)

-- -- 启动协同线程，返回三个值
-- -- 第一个参数为：启动是否成功
-- -- 后面的值为内置函数的返回值
-- success, result1, result2 = coroutine.resume(crt, 5, 10)
-- print(success, result1, result2) -- true	50	0.5

-- ============================================================

-- -- 创建一个协同函数
-- cf = coroutine.wrap(function (a, b)
--     print(a, b)
--     return a+b, a*b
-- end)

-- result1, result2 = cf(3, 5)

-- print(result1, result2)
-- print(type(cf)) -- function

-- ============================================================




